# 新增：添加上级目录到 Python 搜索路径
import sys
import os
# 获取当前文件（conftest.py）所在的目录（test目录）
current_dir = os.path.dirname(os.path.abspath(__file__))
# 获取 test 目录的上级目录（即 Wdy_0925 目录，也就是 Tool 所在的目录）
parent_dir = os.path.dirname(current_dir)
# 将上级目录加入 Python 搜索路径
sys.path.append(parent_dir)

# 原来的导入代码
from formatter import NullWriter  # 你的原有代码
from Tool.tool import ApiRequestTool  # 现在能找到 Tool 模块了
# test_api_basic.py
from formatter import NullWriter

import pytest
import json
from Tool.tool import ApiRequestTool# 导入工具类

# 基础配置（根据你的实际接口修改）
BASE_URL = "http://10.59.9.12:7001"  # 你的服务基础地址
# 接口路径（根据你的实际接口修改）
LOGIN_PATH = "/api/public/login"  # 登录接口（POST）
GOODS_LIST_PATH = "/api/group?page=1"  # 商品列表（GET）
BUY_Path = "/api/group/view?id=2"  # 用户信息修改（PUT）
CREAT_PATH = "/api/order/create"  # 商品删除（DELETE）


# 初始化工具类（整个测试模块复用 1 个实例，保持会话）
@pytest.fixture(scope="module")
def api_tool():
    return ApiRequestTool(base_url=BASE_URL)


class TestPinTuan():
    login_token = None
    # 测试 1：POST 请求（登录接口）
    def test_post_login(self,api_tool):
        print("\n=== 测试 POST 登录接口 ===")
        # 登录参数（根据你的接口字段修改）
        login_data = {"username": "13811033962", "password": "123456"}
        # 调用工具类 POST 方法
        status_code, response_text, response = api_tool.post(path=LOGIN_PATH, data=login_data)

        # 提取token
        TestPinTuan.login_token = response['data']['token']
        print(f'登录的token:{TestPinTuan.login_token}')

        # 基础断言（验证状态码 + 响应包含预期文本）
        assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
        assert "ok" in response_text, f"登录失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")

    # 测试 2：GET 请求（商品列表接口，依赖登录态）
    def test_get_goods_list(self,api_tool):
        print("\n=== 测试 GET 商品列表接口 ===")
        # URL 参数（分页查询）
        list_params = {"page": 1}
        # 调用工具类 GET 方法（自动携带登录 Cookie）
        status_code, response_text = api_tool.get(path=GOODS_LIST_PATH, params=list_params)

        assert status_code == 200, f"商品列表状态码错误：预期 200，实际 {status_code}"
        # assert "商品列表" in response_text, f"商品列表获取失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")

    # 测试 3：GET 请求（商品详情接口，依赖登录态）
    def test_buy_path_list(self,api_tool):
        print("\n=== 测试 GET 商品详情接口 ===")
        # URL 参数（分页查询）
        list_params = {"id": 2}
        # 调用工具类 GET 方法（自动携带登录 Cookie）
        status_code, response_text = api_tool.get(path=BUY_Path, params=list_params)

        assert status_code == 200, f"商品列表状态码错误：预期 200，实际 {status_code}"
        # assert "商品列表" in response_text, f"商品列表获取失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")

    # 测试 3：post请求（商品支付接口，依赖登录态）
    def test_creat_path_list(self,api_tool):
        print("\n=== 测试 GET 商品创建订单接口 ===")
        print(TestPinTuan.login_token, '------------')
        # URL 参数（分页查询）
        list_params = {"id": 2}
        # 调用工具类 post方法（自动携带登录 Cookie）
        creat_data = {"id": "2", "type": "group", "address_id": 14, "store_id": 1, "shipping_type": 1, "bonus_id": "0",
                      "payment": "wechat",
                      "remarks": "", "source": 1,
                      "url": "http://10.59.9.12:7001/wap/pages/cart/confirm?id=2&kid=0&sku_id=&num=1&type=group",
                      "sku_id": "", "num": "1", "kid": "0"}
        status_code, response_text, response = api_tool.post(path=CREAT_PATH, data=creat_data,
                                                             head={'auth-token': f'Bearer {TestPinTuan.login_token}'})
        assert status_code == 200, f"商品列表状态码错误：预期 200，实际 {status_code}"
        # assert "商品列表" in response_text, f"商品列表获取失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")
        print(response)

    # # 测试 4：DELETE 请求（删除商品接口，依赖登录态）
    # def test_delete_goods(api_tool):
    #     print("\n=== 测试 DELETE 删除商品接口 ===")
    #     # 删除参数（商品 ID）
    #     delete_params = {"goods_id": 9999}  # 建议用测试环境的无效 ID，避免影响真实数据
    #     # 调用工具类 DELETE 方法
    #     status_code, response_text = api_tool.delete(path=GOODS_DELETE_PATH, params=delete_params)
    #
    #     assert status_code == 200, f"删除商品状态码错误：预期 200，实际 {status_code}"
    #     assert "删除成功" in response_text or "商品不存在" in response_text, f"商品删除异常，响应：{response_text[:50]}"
    #
    #     print(f"状态码：{status_code}")
    #     print(f"响应内容：{response_text}")


if __name__ == "__main__":
    # 直接运行测试（也可通过 pytest 命令运行）
    pytest.main(["-s", "test_api_basic.py"])